(() => {
    // str 这个参数是string类型的
    function sayHello(str: string) {
        return 'Hello' + str
    }
    let text = 'Beauty'
    console.log(sayHello(text))
})()

// 总结：ts的文件中如果直接书写js的语法代码，那么在HTML文件中直接引入ts文件，在谷歌的浏览器中是可以直接使用的
// 如果ts文件中有了ts的语法代码，那么就需要把这个ts文件编译成js文件，在HTML文件中引入js文件来使用
// ts文件中的函数的形参，如果使用了某个类型进行修饰，那么最终在编译的js文件中是没有这个类型的
// ts文件中的变量使用的是let进行修饰，编译的js文件中的修饰符就变成var



class User {
    fullName: string
    firstName: string
    lastName: string

    constructor(firstName: string, lastName: string) {
        this.firstName = firstName
        this.lastName = lastName
        this.fullName = firstName + ' ' + lastName
    }
}

interface Person {
    firstName: string
    lastName: string
}

function greater(person: Person) {
    return 'Hello ' + person.firstName + ' ' + person.lastName
}

let user = new User('Little', 'Beauty')
console.log(greater(user))

function Fn(obj: object): object {
    console.log('Fn()', obj)
    return {}
}
// error
// console.log(Fn('abc'))

interface Alarm {
    alert(): any
    lightOn(): void
}